﻿using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Text.RegularExpressions;
using Contacts.Data.Data;

namespace Contacts.Web
{
    public partial class GroupEditor : BasePage
    {
        private string _appconfConnString = ConfigurationManager.AppSettings["DatabaseConnection"];
        private ContactsDataGroups _dataGroups = new ContactsDataGroups();

        protected override void PageLoad()
        {
            lblGroupID.Text = Request.QueryString["GroupID"];
            if (!IsPostBack)
            {
                ShowGroupInfo();
            }
        }

        protected void BtnSaveIconClick(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;

            string fileName = Path.GetFileName(IconUpload.PostedFile.FileName);
            // Скомбинировать целевой каталог с именем файла.
            string destIconPath = Path.Combine(@"C:\Images\", fileName);

           if (File.Exists(destIconPath))
           {
              lblWorning.Text = "Warning! - Файл с таким именем уже существует!";
           }
           else
           {
              // Сохранить файл на сервере.
              IconUpload.PostedFile.SaveAs(destIconPath);

              lblNewPhoto.Text = fileName; // НАЗВАНИЕ КАРТИНКИ (Должно уходить в базу)
              imgIcon.ImageUrl = @"GetImage.aspx?file=" + fileName;
           }

        }

        protected void BtnSaveGroupClick(object sender, EventArgs e)
        {
           if (!Page.IsValid) return;

            int idOfCurrentGroup;
            string rowGroupName = ttGroupName.Text;
            string rowDescription = ttDescription.Text;

            if (lblGroupID.Text == "")
            {
                idOfCurrentGroup = 0;
            }
            else
            {
                idOfCurrentGroup = Convert.ToInt32(lblGroupID.Text);
            }

            string rowIcon = lblNewPhoto.Text;
            if (lblNewPhoto.Text.Length < 3) rowIcon = lblIconPath.Text;
            if ((lblIconPath.Text != "DefaultIcon.png") && (lblNewPhoto.Text != ""))
            {
               File.Delete("C:\\Images\\" + lblIconPath.Text);
            }

            _dataGroups.SaveGroup(idOfCurrentGroup, rowGroupName, rowIcon, rowDescription);

            Response.Redirect("GroupList.aspx");
        }

        protected void BtnCancelClick(object sender, EventArgs e)
        {
           //TODO: Отменять применение картинки!!!

           if ((lblNewPhoto.Text != lblIconPath.Text) && (lblNewPhoto.Text != ""))
           {
              File.Delete("C:\\Images\\" + lblNewPhoto.Text);
           }
           Response.Redirect("GroupList.aspx");
        }

        public void ShowGroupInfo()
        {
            SqlConnection sqlConnectionToContactsDB = new SqlConnection(_appconfConnString);
            sqlConnectionToContactsDB.Open();
            SqlCommand sqlCommandSelectGroupByID = new SqlCommand("spSelectGroupByID", sqlConnectionToContactsDB);
            sqlCommandSelectGroupByID.CommandType = CommandType.StoredProcedure;
            sqlCommandSelectGroupByID.Parameters.AddWithValue("@GroupID", lblGroupID.Text);
            SqlDataReader groupReader;
            groupReader = sqlCommandSelectGroupByID.ExecuteReader();
            if (groupReader.Read())
            {
                ttGroupName.Text = groupReader["GroupName"].ToString();
                ttDescription.Text = groupReader["Description"].ToString();
                lblIconPath.Text = groupReader["Icon"].ToString();
            }

            //lblIconPath.Text = @"GetImage.aspx?file=Default.png";

            if (lblIconPath.Text == "")
            {
               lblIconPath.Text = "DefaultIcon.png";
            }

            imgIcon.ImageUrl = @"GetImage.aspx?file=" + lblIconPath.Text;

            sqlConnectionToContactsDB.Close();
        }

       public bool IsValidGroupName(string groupName) // Проверка имени группы
       {
          string expr = @"(.|\s|\r|\n|\t){2,}";
          Match isMatch = Regex.Match(groupName, expr);
          return isMatch.Success;
       }

        protected void CustValidGroupNameLengthServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
        {
           // (.|\s|\r|\n|\t){2,} - от двух ЛЮБЫХ символа
           // .{2,}
           if (!IsValidGroupName(ttGroupName.Text)) {args.IsValid = false;}
        }

        protected void CustValidGroupNameExistServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
        {
           int valGroupName = _dataGroups.CheckOfGroupName(ttGroupName.Text);
           if (lblGroupID.Text == "")
           {
              lblGroupID.Text = "0";
           }
           int valGroupID = Convert.ToInt32(lblGroupID.Text);
           if (valGroupName == 0)
           {
              args.IsValid = true;
           }
           else
           {
              if (valGroupName != valGroupID) { args.IsValid = false; }
           }
           
        }




    }
}